![](/img/trans.png)
[英]how to change all bookmarks property to inherit zoom in existing pdf using itext
[英]Itext change bookmarks zoom level to inherit zoom in existing pdf
使用iText5 PDF庫,我能夠讀取 PDF中存在的書簽 。 現在,我想使用iText更改現有PDF zoom level of bookmarks
的zoom level of bookmarks
(繼承縮放)。 是否可以使用iText PDF庫?如何使用?
我已經附上了截圖。
這是我用來更改書簽縮放級別的代碼(按照@lowagie注釋):
public void changeList(List<HashMap<String, Object>> list) {
for (HashMap<String, Object> entry : list) {
for (String key : entry.keySet()) {
System.out.println(key);
if ("Kids".equals(key)) {
Object o = entry.get(key);
changeList((List<HashMap<String, Object>>) o);
} else if ("Page".equals(key)) {
String dest = (String) entry.get(key);
entry.put("Page", dest.replaceAll("Fit", "XYZ 30 100 0"));
}
}
}
}
書簽樹結構:
請看一下我對以下問題的回答: 將繼承Zoom(action屬性)設置為pdf文件中的書簽
在該答案中,我使用SimpleBookmark
對象閱讀了書簽。 這可能與您閱讀書簽的方式相同。 結果是代表輪廓樹的HashMap
對象List
。 我使用遞歸方法查找所有"Page"
條目。
這些頁面條目包含一個目標,例如Fit
, FitH
, XYZ
,...。您需要將所有這些引用都更改為XYZ
引用,並將縮放系數設置為0。縮放系數0等效於“繼承縮放” 。
在我的Set繼承PDF書簽書簽的回答中,我有以下代碼:
public void changeList(List<HashMap<String, Object>> list) {
for (HashMap<String, Object> entry : list) {
for (String key : entry.keySet()) {
if ("Kids".equals(key)) {
Object o = entry.get(key);
changeList((List<HashMap<String, Object>>)o);
}
else if ("Page".equals(key)) {
String dest = (String)entry.get(key);
entry.put("Page", dest.replaceAll("Fit", "FitV 60"));
}
}
}
}
顯然,您可以用全新的動作替換任何現有的“ Page”動作。 例如:
entry.put("Page", "XYZ 30 100 0");
現在,您將使用繼承的縮放因子跳轉到頁面上的坐標30 100。 如果要放大其他部分,例如與原始位置或多或少對應的位置,則需要檢查原始PDF中遵循FitR
的坐標。 共有4個:左下x,左下y,右上x和右上y坐標。 您可以將字符串與原始目標位置解析為這些值,然后將其中兩個坐標重用為XYZ
目標中的X和Y值。
與XYZ目標一起傳遞的XY坐標是左上角的坐標。 例如,如果您具有FitR -3 234 486 627
,則可以放大坐標為llx = -3,lly = 234,urx = 486和ury = 627的矩形(ll表示左下; ur表示上-對)。 左上角是llx,ury或在您的情況下x = -3和y =627。簡而言之:在這種情況下,您需要“ XYZ -3 627 0”。
不幸的是,如果您必須使用iText,我無濟於事。 但是,如果您只想更改書簽的縮放級別,則還可以使用PDF Clown庫,我個人非常喜歡該庫(尤其是與iText相比在API設計方面)。
看看我編寫的這個小型Java應用程序,它確實可以滿足您的需求。 Wizard
類為您提供有關如何更改縮放級別的概述。 基本上,您可以使用以下方法實現此目的:
private void modifyBookmarks(Bookmarks bookmarks) {
for (Bookmark bm : bookmarks) {
if (!bm.getBookmarks().isEmpty()) {
modifyBookmarks(bm.getBookmarks());
}
if (bm.getTarget() instanceof GoToDestination<?>) {
Destination dest = ((GoToDestination<?>)
bm.getTarget()).getDestination();
dest.setMode(ModeEnum.XYZ);
dest.setZoom(0.0);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.