バックグラウンド:
プログラムで生成しているPDFがあります。PDFをサーバーからプリンターに直接送信できる必要があります(中間アプリケーションを介してではありません)。現時点では、上記のすべて (PDF の生成、プリンターへの送信) を実行できますが、フォントが PDF に埋め込まれていないため、プリンターがフォントの置き換えを行っています。
生成時にフォントが埋め込まれない理由:
SQL Reporting Services 2008 を使用して PDF を作成しています。SQL Reporting Services にはフォントが埋め込まれないという既知の問題があります (一連の要件が満たされない限り - http://technet.microsoft.com/en-us/library /ms159713%28SQL.100%29.aspx )。理由は聞かないでください。PDF は MS のリストされた要件をすべて満たしていますが、フォントはまだ埋め込まれていないと表示されます。フォントが埋め込まれているかどうかを実際に制御することはできません。 . Microsoft から提案された回避策 ( http://blogs.msdn.com/b/donovans/archive/2007/07/20/reporting-services-pdf-renderer-faq.aspx 'Reporting Services がフォントの埋め込みを実行するタイミング' の下) PDFを後処理してフォントを手動で埋め込むことです。
目標 既に生成された PDF ドキュメントを取得し、プログラムでそれを「開き」、フォントを埋め込み、PDF を再保存します。
アプローチ iTextSharp に向けられましたが、ほとんどの例は Java バージョン用であり、iTextSharp バージョンに変換するのに問題があります (iTextSharp のドキュメントが見つかりません)。
私がする必要があることのために、この投稿に取り組んでいます: Itext embed font in a PDF .
しかし、私の人生では、ByteArrayOutputStream オブジェクトを使用できないようです。見つからないようです。私は調査して調査しましたが、それがどのクラスにあるのか、またはどこにあるのか誰も言わないようですので、using ステートメントに含めることができます。私はReflectorを開いたところにひびが入りましたが、どこにも見つからないようです.
これは私がこれまでに持っていたもので、コンパイルなどです(結果は、生成されたPDFの私のバイト[]です)。
PdfReader pdf = new PdfReader(result);
BaseFont unicode = BaseFont.CreateFont("Georgia", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
// the next line doesn't work as I need a ByteArrayOutputStream variable to pass in
PdfStamper stamper = new PdfStamper(pdf, MISSINGBYTEARRAYOUTPUTSTREAMVARIABLE);
stamper.AcroFields.SetFieldProperty("test", "textfont", unicode, null);
stamper.Close();
pdf.Close();
では、iTextSharp を使用してフォントを PDF に埋め込むのを手伝ってくれる人や、正しい方向に向けてくれる人はいますか?
この目標を達成するために、iTextSharp 以外のソリューションを使用しても問題ありませんが、無料で、企業が内部アプリケーション (つまり Affero GPL) に使用できる必要があります。