1

特定の時点でレポートが pdf として作成されるアプリケーションがあります。最初はすべてが完璧に機能しているように見えましたが、使用したフォントが作成した PDF に埋め込まれていないことが後でわかりました。そのため、pdf を自分で表示することはできましたが、他の誰かがアプリケーションを使用すると、空白のドキュメントが表示されました。

次のコードを使用して、PdfSharp を使用してフォントを埋め込んでみました。

        public byte[] EmbedPdf (byte[] originalPdf)
        {
            //open existing pdf through stream
            MemoryStream preStream = new MemoryStream();
            preStream.Write(originalPdf, 0, originalPdf.Length);
            PdfDocument pdf = PdfReader.Open(preStream, PdfDocumentOpenMode.Import);
            preStream.Close();

            //open second document to paste the original data into which should be including embedding
            PdfDocument nieuwePdf = new PdfDocument();
            var options = new XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always);

            //loop through pages to insert them
            for (int page = 0; page < pdf.Pages.Count; page++)
            {
                PdfPage pdfPage = nieuwePdf.AddPage(pdf.Pages[page]);

                //the following line is the point where the application throws the error
                XGraphics xgr = XGraphics.FromPdfPage(pdfPage);
                XFont font = new XFont("Times New Roman", 12, XFontStyle.Regular, options);
            }

            //put new pdf back to the stream so it can be returned in the same format the original came in
            MemoryStream postStream = new MemoryStream();
            nieuwePdf.Save(postStream);
            originalPdf = postStream.ToArray();

            //end the stream
            postStream.Close();

            return originalPdf;
        }

表示されるエラーは、新しい pdf が元のページからページを取得するはずの行で、「収縮したストリームが早期に終了します」です。このエラーは、ストリームの読み取り時にストリーム内の何かが間違っていたことを意味すると考えましたが、エラーを解決する方法を見つけることができませんでした。この問題を解決するのを手伝ってくれませんか?

参考までに、次のリンクは、同様の問題を抱えていて、上記のコードの例として機能した別の人を示しています: PDFsharp edit a pdf file



編集: これは、アプリケーションを使用して作成したテスト pdf です。このためにテンプレートに複数のフォントを入れたので、Windows ではすべてのフォントが Calibri に変換されることに気付きました (ヘッダーは Arial Black、フッターは Verdana、メイン テキストは Times New Roman でした)。

ここからダウンロード: http://www.wikiupload.com/L5GMAN88J9JXAYR

また、あなたの提案に感謝します。私は両方を試しましたが、どちらも役に立たなかったようです. ストリームを閉じるために、コメントアウトして同じエラーが発生することさえありました。

4

1 に答える 1

0

変更しようとしている PDF ファイルに問題があるようです。

「この問題を解決するのを手伝ってくれませんか?」という質問に対する答えです。問題を再現できる PDF ファイルがないわけではありません。

于 2014-06-20T10:32:14.347 に答える