0

ASP.NET(Framework 3.5)とCrystal Reportsを使用して大学生のIDカードをPDFファイルで生成していますが、カードを透明なシートに印刷して、同じサイズのプラスチックカードに貼り付けたいのですが、印刷されるすべてのものがミラーリングされます。クリスタルレポート自体をミラーリングした形でデザインしようとしましたが、ミラーリングされた形でテキストを書く方法が見つかりませんでした。誰かがこの作業を行う方法を提案できますか?私が望むのは、PDFファイルまたはCrystalReportの内容を反転することだけです。

4

2 に答える 2

0

いくつかのアイデア:

1)PDFを画像にレンダリングします(Ghostscript / ImageMagickまたは商用PDFライブラリ(Tifなど)を使用して、印刷用に画像をミラーリングします)

2)PDF自体をミラーリングします。iTextSharpで可能かもしれません

3)レポートツールを使用して、ある種のリバースフォントを試してみてください(簡単なオプションです)

于 2011-03-30T08:33:34.280 に答える
0

ページをインポートして PDF コンテンツ ストリームに直接書き込むことができる API であれば、これを行うことができます。

iText (Java) では、次のようになります。

PdfReader reader = new PdfReader(pdfPath);
Document doc = new Document();
PdfWriter writer = PdfWriter.getInstance( doc, new FileOutputStream(outPath) );

for (int pageNum = 1; pageNum <= reader.getNumberOfPages(); ++pageNum) {
  PdfImportedPage page = writer.getImportedPage(reader, pageNum);
  PdfContentByte pageContent = writer.getDirectContent();

  // flip around vertical axis
  pageContent.addTemplate(page, 1f, 0f, 0f, -1f, page.getWidth(), 0f);
  doc.newPage();
}

上記のコードは、次の ass-u-me-options を作成しています。

  • デフォルトのDocument()ページ サイズは、現在の のサイズと一致しますPdfImportedPage
  • ソース ページは回転しません。
  • 注釈、オプションのコンテンツ グループ (レイヤー)、およびページ コンテンツに表示されないその他のさまざまな部分はありません

いくつかの回避策:

// keep the page size consistent
PdfImportedPage page = writer.getImportedPage(reader, pageNum);
doc.newPage(page.getBoundingBox());

PdfContentByte pageContent = writer.getDirectContent();
pageContent.addTemplate(...);

// to compensate for a page's rotation, you need to either rotate the target page 
// Easy in PdfStamper, virtually impossible with `Document` / `PdfWriter`.
AffineTransform unRotate = AffineTranform.getRotateInstance(degToRad(360 - pageRotation), pageCenterX, pageCenterY)
AffineTransform flip = new AffineTransform(1f, 0f, 0f, -1f, page.getWidth(), 0f);
AffineTransform finalTrans = flip;
finalTrans.concatenate(unRotate);

pageContent.addTemplate(page, finalTrans);

公正な警告: 私の 2 次元行列法はそれほど強力ではありません。私はほぼ間違いなく何か間違ったことをしています。この種のものをデバッグすることは、本当の PITA です。ものは「正しく見える」か、ページから完全に外れてひどく台無しになっています(つまり、見えないので、どちらに行ったのかわかりません)。ページの四角形を [-1000 -1000 1000 1000] ずつ変更することがよくあります。楽しいもの。

注釈のコピーなどについては... 痛い。PdfCopy はそのaddPage()メソッドを介してすべてのことを行いますが、最初にページ コンテンツを変換することはできません。PdfImportedPage に加えた変更は無視されます。あなたは本当にハードウェイに行き詰まっています...すべての厄介なビットを手動でコピーし、それらを変更してめくったページを補う...またはソースをいじって、addPage()必要な結果を取得します。どちらも PDF に関する深い知識が必要です。

詳細を考えると、おそらく心配する必要はありませんが、別の状況の人が同じ目標を達成した場合に備えて、言及する価値があります.

于 2011-03-30T20:42:29.773 に答える