白紙(読み込めない)PDFが出力されることがある

89 views
Skip to first unread message

井上翔太

unread,
Oct 29, 2025, 1:56:47 AM (13 days ago) Oct 29
to RapidReportサポート QAフォーラム
お世話になります。

C#  .NET 8.0の環境にてPDFファイルを出力した際に
相互参照テーブル(xrefテーブル)の部分が以下のようになり白紙のPDFが出力される場合があります。
Acrobat Readerなどでは該当ファイルを表示する際に読み込みエラーが発生する場合があります。
----------------------------
xref
0 2
0000000000 65535 f 
0000045557 00000 n 
3 4
0000000265 00000 n 
0000000715 00000 n 
0000000903 00000 n 
0000001091 00000 n 
8 1
0000045692 00000 n 
14 2
0000045755 00000 n 
0000045841 00000 n 
trailer
<</Size 16/Info 15 0 R/ID [<ccabd0677948675d0e2bd36b68e4a9aa><604fc03dff957f69ccdc5ea1f32981e0>]/Root 14 0 R>>
startxref
45990
%%EOF
----------------------------
同じ内容のPDFを出力した際にも発生する場合と発生しない場合があるのですが、何が原因として考えられますでしょうか?

RapidReport

unread,
Oct 30, 2025, 12:58:29 AM (12 days ago) Oct 30
to RapidReportサポート QAフォーラム
これまで当社で把握しているケースでは、不正なPDFが出力されたという例は確認されていません。
iTextの内部仕様を把握した上で利用しているのではないため、明確な回答にはならず申し訳ありませんが、
欠番を含んだxrefテーブルが出力されているようですので、たとえば
カスタム要素レンダラなどで何らかの操作を行っている、
出力したPDFに何らかの変換を行っている、といったことはないでしょうか。

また、以下の投稿のようなことが起きているといったことはないでしょうか。
2025年10月29日水曜日 14:56:47 UTC+9 shota...@kacoms.co.jp:

井上翔太

unread,
Nov 4, 2025, 6:20:35 AM (6 days ago) Nov 4
to RapidReportサポート QAフォーラム
ご返信を頂戴しありがとうございます。

頂いた情報も含めてこちらで事象の詳細を調査したところ、PDFレンダラをマルチスレッドに起動したことが発生条件のようでした。
弊社要件ではマルチスレッドでの実行が必須となりますので、こちらの解消方法にご教授頂戴出来ないでしょうか?

◆再現手順
①以下のソースのMemoryStreamのサイズを測定
②まったく同じ2つのPDFの作成をマルチスレッドで起動
③結果、MemoryStreamのサイズが異なっている
→作成されるPDFファイルのサイズも異なっており、相互参照テーブル(xrefテーブル)の部分に差異がある
④仮の施行としてlockを使用してシングルスレッドで起動
⑤結果、MemoryStreamのサイズが一致する
→作成されるPDFファイルのサイズも一致する
 
--ソースを一部抜粋-------------------------------------------------------------
using (var ms = new MemoryStream())
{
    var renderer = new PdfRenderer(ms, setting);
    // PDFの画像配置
    renderer.ImageLoaderMap.Add("ActionIcon", new PdfImageLoader(getIcons()));
 
    // メタ情報
    // 作成者
    renderer.Document.AddAuthor(outputData.CreaterName);
 
    pages.Render(renderer);
 
    pdfFiles.Add((createdFileTitle, createTitle, ms.ToArray()));
}
--ソースを一部抜粋-------------------------------------------------------------
 
また、itextについて以下のような情報もあるようです。
https://kb.itextpdf.com/it5kb/release-itext-5-4-0

2025年10月30日木曜日 13:58:29 UTC+9 RapidReport:

RapidReport

unread,
Nov 5, 2025, 3:36:55 AM (6 days ago) Nov 5
to RapidReportサポート QAフォーラム
Thread/Taskクラスなどを利用してご自身でマルチスレッド処理を実装されているということでしょうか。

すみませんが、複数のスレッドから共有して利用しているオブジェクトがないかをご確認ください。

2025年11月4日火曜日 20:20:35 UTC+9 shota...@kacoms.co.jp:

RapidReport

unread,
Nov 5, 2025, 6:27:49 PM (5 days ago) Nov 5
to RapidReportサポート QAフォーラム
ASP.NET Coreでも問題なく利用できていたので、
オブジェクトをスレッド間で共有しなければ問題ないという認識でいたのですが、
改めて調査してみますので時間をください。

2025年11月5日水曜日 17:36:55 UTC+9 RapidReport:

井上翔太

unread,
Nov 6, 2025, 7:37:12 PM (4 days ago) Nov 6
to RapidReportサポート QAフォーラム
お世話になります。調査のご検討を頂きましてありがとうございます。
ご指摘頂いておりましたマルチスレッドに関してはスレッドを分ける部分は弊社が実装しているという認識でお間違いありません。
また、各スレッドでインスタンスを生成しておりスレッド間におけるオブジェクトの共有については無いという認識でございます。

お手数おかけしますが、何卒ご確認よろしくお願い致します。

2025年11月6日木曜日 8:27:49 UTC+9 RapidReport:
Reply all
Reply to author
Forward
0 new messages