2011-03-30 765 views
0

我使用ASP.NET(Framework 3.5)和Crystal Reports生成My College的學生的身份證,但我想在透明表格中打印卡並將其粘貼到一張相同尺寸的塑料卡片,以便我需要打印所有要打印的鏡像。 我試着用鏡像的形式設計水晶報告,但是找不到寫鏡像文本的方法。任何人都可以建議一種方法來完成這項工作,我想要的只是翻轉PDF文件或Crystal Report中的內容。鏡像(翻轉)打印PDF文件

回答

0

一對夫婦思想:

1)渲染PDF到圖像(使用的Ghostscript/ImageMagick的或商業的PDF庫((例如TIF)和鏡像圖像打印

2)鏡像的PDF本身,也許有可能與iTextSharp的

3)使用報告工具,並嘗試使用某種反向字體(coud快選項)

0

任何API,讓您導入頁面,並直接寫入PDF內容流會讓你做這個。

在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(); 
} 

上面的代碼進行以下屁股-U-ME-ptions:

  • 默認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); 

公平的警告:我的二維矩陣福是不是所有的強。我幾乎肯定會做錯事。調試這些東西是一個真正的PITA。東西要麼「看起來是正確的」,要麼是完全搞砸了它的頁面(ergo隱形,所以你不知道它走的是哪條路)。我經常通過[-1000 -1000 1000 1000]更改頁面矩形,以便我可以看到它的全部內容。好玩的東西。

至於複製註釋等......哎。 PdfCopy通過它的addPage()方法爲你做了所有這些工作,但是這不會讓你首先轉換頁面內容。您對PdfImportedPage所做的任何更改都將被忽略。你真的被困在艱難的路上......手動複製所有的煩人的比特,並改變它們以補償你翻轉的頁面......或者將源碼搞亂到addPage()以獲得你想要的結果。兩者都需要對PDF有深入的瞭解。

考慮到具體情況,您可能不需要擔心它,但值得一提的是,如果有不同情況的人出現相同的目標。