2011-01-25 10 views
1

PDFのページを繰り返し、すべてのイメージの補間がfalseに設定されている新しいPDFを作成します。次のようなことができると思っていましたが、PDFページの画像や長方形にアクセスする方法が見つかりません。iText:ページ上のイメージのイメージ補間の設定

PdfCopy copy = new PdfCopy(document, new FileOutputStream(outFileName)); 
copy.newPage(); 
PdfReader reader = new PdfReader(inFileName); 
for(int i = 1; i <= reader.getNumberOfPages(); i++) { 
    PdfImportedPage importedPage = copy.getImportedPage(reader, i); 
    for(Image image : importedPage.images()) 
     image.isInterpolated(false); 
    copy.addPage(importedPage); 
} 
reader.close(); 

ただし、PdfImportedPage.images()はありません。どのように私は同じことをするかもしれないかについての任意の提案?

乾杯

ニック

答えて

0

それはそれ容易ではないだろう。あなたが望むことを行うための高度な方法はありません。 XObject Imagesを探しているリソースを列挙し、その/ Interpolateフラグをクリアする必要があります。

あなたはリソースへの公開方法がないため、PdfImportedPageを作成する前にそれを行う必要があります。 Grr。

void removeInterpolation(int pageNum) { 
    PdfDictionary page = someReader.getPageN(pageNum); 
    PdfDictionary resources = page.getAsDict(PdfName.RESOURCES); 

    enumResources(resources); 
} 

void enumResource(PdfDictionary resources) { 
    PdfDictionary xobjs = resources.getAsDict(PdfName.XOBJECTS); 

    Set<PdfName> xobjNames = xobjs.getKeys(); 
    for (PdfName name : xobjNames) { 

    PdfStream xobjStream = xobjs.getAsStream(name); 

    if (PdfName.FORM.equals(xobjStream.getAsName(PdfName.SUBTYPE))) { 
     // xobject forms have their own nested resources. 
     PdfDictionary nestedResources = xobjStream.getAsDict(PdfName.RESOURCES); 
     enumResources(nestedResources); 
    } else { 
     xobjStream.remove(PdfName.INTERPOLATE); 
    } 
    } 
} 

上記のコードではスキップされたヌルチェックがかなりあります。ページはリソース辞書を持つ必要はありませんが、ほとんどの場合、そうします。 XObjectフォーム用の同意書。指定されたキーがないか、または異なる型の場合、すべてのgetAs*関数はnullを返します。あなたはそのアイデアを得ます。

関連する問題