4

ZUGFeRD ファイルを生成するために iTextSharp をテストしています。私の最初のステップは、既存の PDF/A-3 ファイルから ZUGFeRD コンフォーム ファイルを生成することでした。これは、PDFACopy を使用して必要な PDFFileSpecification を作成することで成功しました。

次のステップは、既存の PDF または PDF/A-1 ファイルから PDF/A-3 ファイルを生成することです。これは難しい部分です。

まず、PDFACopy を通常の PDF (PDF/A ではない) と組み合わせて使用​​しようとすると、PDFACopy は PDF/A 準拠のファイルでのみ使用できるというエラーが表示されます。私の最初の質問は、iTextSharp を使用して PDF から PDF/A-3 準拠のファイルを取得する方法です。

ギャップを減らすために、Ghostscript を使用して PDF を PDF/A-1 ファイルに変換することにしました (cf. Ghostscript を使用して PDF を PDF/A または PDF/X に変換する方法は? )。これは成功したので、もう一度やり直しました。次に、「PDF/A バージョンが異なります」というエラーが表示されます。投げられました。既存の PDF/A-1 から新しい PDF/A-3 にコピーできないようです。既存の PDF(/A-1) からこの PDF/A-3 を作成するにはどうすればよいですか? それは可能ですか?

これが私のコードです:

XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(XML);
        byte[] xmlBytes = Encoding.Default.GetBytes(xmlDoc.OuterXml);

        Document doc = new Document();
        PdfReader src_reader = new PdfReader(pdfPath);    

        FileStream fs = new FileStream(DEST, FileMode.Create, FileAccess.ReadWrite);

        PdfACopy aCopy = new PdfACopy(doc, fs, PdfAConformanceLevel.ZUGFeRD);

        doc.AddLanguage("de-DE");
        doc.AddTitle("title");
        doc.SetPageSize(src_reader.GetPageSizeWithRotation(1));

        aCopy.SetTagged();
        aCopy.UserProperties = true;
        aCopy.PdfVersion = PdfCopy.VERSION_1_7;
        aCopy.ViewerPreferences = PdfCopy.DisplayDocTitle;
        aCopy.CreateXmpMetadata();
        aCopy.XmpWriter.SetProperty(PdfAXmpWriter.zugferdSchemaNS, PdfAXmpWriter.zugferdDocumentFileName, "ZUGFeRD-invoice.xml");

        //Ab hier können keine Metadaten mehr geschrieben werden
        doc.Open();

        ICC_Profile icc = ICC_Profile.GetInstance(new FileStream(ICM, FileMode.Open));
        aCopy.SetOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc);

        [...add the dictionary to doc..]
        aCopy.AddDocument(src_reader);
        doc.Close();

もう 1 つの質問: addDocument は機能しますが、copy.addPage(copy.getImportedPage(src_reader, i)) を使用すると、「ドキュメントにページがありません」というエラーがスローされます。なぜ?

4

1 に答える 1

7

1. 通常の PDF を PDF/A ドキュメントに変換できますか?

答えは、場合によります。

PDF/A は PDF のサブセットであり、いくつかの義務 (すべてのフォントを埋め込む必要があるなど) と制限 (Javascript は許可されないなど) があります。iText は、いくつかの理由により、通常の PDF を PDF/A に「自動的に」変換することはできません。たとえば、フォントが埋め込まれていない場合、iText は、埋め込まれていないフォントを置き換えるために使用するフォントも、必要なフォント プログラムの場所も知りません。通常、あるフォントを任意の別のフォントに置き換えると非常に見苦しい PDF になるため、これには人間の介入が必要です。

答えは、iText を使用して PDF を PDF/A に変換する人がいるからです。ただし、これには多くのプログラミングと人間の決定が必要ですGhostScript を使用すると成功することがわかりました。その場合、GhostScript が代わりにいくつかの決定を下しています。これにより、許容できる結果が得られます。場合によっては、結果が受け入れられないことがあります (たとえば、フォントが一致しない場合、非常に奇妙に見える PDF になります)。

2. PDF/A-1 ファイルを PDF/A-3 ファイルに変換できますか?

PDF/A 標準は、古いバージョンの PDF/A 仕様が決して時代遅れにならないように書かれています。新しいバージョンは新しい機能を追加するだけです。例: PDF/A-1 は PDF 1.4 仕様に基づいていました。オプションのコンテンツ機能 (OCG) は、PDF 1.5 で導入されました。OCG の導入は、PDF/A-2 と PDF/A-1 の違いの 1 つです。

これは、PDF/A-1 に準拠するすべてのファイルが自動的に PDF/A-2 に準拠することを意味します。ただし、PDF/A-2 ファイルには、PDF/A-1 でサポートされていない機能が含まれている可能性があります。

3. PDF/A-2 と PDF/A-3 の違いは何ですか?

PDF/A-2 と PDF/A-3 は、1 つの違いを除いて同一です。PDF/A-3 ファイルには、PDF/A ファイルではない添付ファイルを含めることができます。たとえば、PDF/A-3 ファイルには添付ファイルとして Word ファイル、XLS ファイル、プレーン テキスト ファイルなどを含めることができます。添付ファイルとして。

要約:

これは幅広い質問に対する幅広い回答です (あなたの質問はさまざまな方向に向けられているため、特定の回答を提供することは困難です)。請求書を作成するために、既に組み込まれている ZUGFeRD サポートを使用してみませんか? 詳細については、請求の未来、ZUGFeRDをご覧ください。

于 2015-12-11T08:40:50.370 に答える