私はpdf.jsを使用して、Javascriptを使用したブラウザを介してPDFコンテキストを持つことを計画しています。問題は、私が使用している一部の PDF には、特定のバージョンの Adobe Reader が必要なことです。pdf.js は、まだ (これまでに?) これらのスプーフィングをサポートしていません。私が知る必要があるのは、C# で PDF を開いてこれらのリーダーとバージョンの要件を削除する方法とその方法があるかどうかです。itextsharpを使用して他の PDF 操作をサーバー側で行うことを計画していたので、これを使用した例が最も役立ちます。これらActionResult
を MVC 4 経由で ajax リクエストから提供する予定なので、MemoryStream
この操作の最後に a が最も役立ちます。
2 に答える
そのため、最終的pdf.js
には必要なことを行うことができませんでしたが、 をオブジェクトに変換し、Xfa/Pdf
必要C#
に応じて Json を介してページを Javascript に送信し、 でレンダリングすることができましたHTML5 Canvas
。以下のコードは、xfa-in-a-pdf ファイルを受け取り、それを の助けを借りて C# オブジェクトに変換しますitextsharp
。
PdfReader.unethicalreading = true;
PdfReader reader = new PdfReader(new FileStream(Statics.PdfUploadLocation + PdfFileName, FileMode.Open, FileAccess.Read));
XfaForm xfaForm = new XfaForm(reader);
XDocument xDoc = XDocument.Parse(xfaForm.DomDocument.InnerXml);
string xfaNamespace = @"{http://www.xfa.org/schema/xfa-template/2.6/}";
List<XElement> formPages = xDoc.Descendants(xfaNamespace + "subform").Descendants(xfaNamespace + "subform").ToList();
TotalPages = formPages.Count();
var fieldIndex = 0;
RawPdfFields = new List<XfaField>();
for (int page = 0; page < formPages.Count(); page++)
{
RawPdfFields.AddRange(formPages[page].Descendants(xfaNamespace + "field")
.Select(x => new XfaField
{
Page = page,
Index = fieldIndex++,
Name = (string)x.Attribute("name"),
Height = GetUnitFromPossibleString((string)x.Attribute("h")),
Width = GetUnitFromPossibleString((string)x.Attribute("w")),
XPosition = GetUnitFromPossibleString((string)x.Attribute("x")),
YPosition = GetUnitFromPossibleString((string)x.Attribute("y")),
Reference = GetReference(x.Descendants(xfaNamespace + "traverse")),
AssistSpeak = GetAssistSpeak(x.Descendants(xfaNamespace + "speak"))
}).ToList());
}
PDF ファイルn-400.pdf
はAdobe XML Forms Architecture (XFA)を使用しています。これは、 pdf.js がサポートしていないように見えるXFAもサポートするビューアーが必要であることを意味します。
このような PDF には、通常、XFA をサポートするビューアーが PDF に必要であることを示す標準的な PDF コンテンツが含まれています。あなたの場合、コンテンツには含まれています
このメッセージが最終的に文書の適切な内容に置き換えられない場合、PDF ビューアーはこのタイプの文書を表示できない可能性があります。
これは実際に XFA 対応ビューアーが何をするかを示しており、XFA XML データの情報に基づいていくつかのページをレンダリングし、PDF スタイルのページの説明の代わりにそれを表示します。
PDF 仕様 ISO 32000-1は Adobeによって独自に定義されていますが、 XFA データを PDF ドキュメントに埋め込む方法について説明しています。セクション 12.7.8 XFA フォーム。
フラット化された状態のフォームのみが必要な場合は、iText Demo: Dynamic XFA forms in PDF を参照してください。