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