2012-11-13 53 views
1

我試圖做我認爲是一個簡單的搜索和替換PDF文件中的標記。使用CAM :: PDF進行搜索並替換

我有這個PDF文件:http://servera.service.com/LABELS.pdf

我使用與CAM :: PDF這個簡單的Perl腳本,讓頁面內容,並做了簡單的 搜索和標記取代。

$pdf = CAM::PDF->new('LABELS.pdf'); 

$page = $pdf->getPageContent(1); 

$page =~ s/\\045\\045Carrier_Tracking_Number\\045\\045/ABE1234567890/; 

$pdf->setPageContent(1, $page); 

$pdf->cleanoutput('after.pdf'); 

exit; 

我得到的是http://servera.service.com/after.pdf

當我轉儲的頁面內容,這是我的替代

http://servera.service.com/before.txt

前有,這就是我,取代後

http://servera.service.com/after.txt

顯然我錯過了一件非常簡單的事情。

回答

0

在我看來,你沒有做錯任何事,代碼也按預期運行。 但是,我沒有說這些數字'1234567890',你被迫寫入到文檔中,將完全顯示爲它們在PDF上的樣子。

這與字符'%'具有相同的原因,您將其替換爲'\ 045'而不是通常'%'。 PDF文檔編碼在CMap(Adobe內置編碼表)中。 如果你用'\ 115'替換字符串,你會得到'M','\ 116'是'N','\ 117'是'O',但我不知道'\ 118'或'P'是。

'getPageContent'返回頁面的整個佈局內容。 我建議你使用'getPageText'而不是'getPageContent'來獲得一個真正的字符串。 然後您可以正常替換或處理字符串。

my $textpage = $pdf->getPageText(1); 
$textpage =~ s/%%Carrier_Tracking_Number%%/ABD1234567890/; 

請記住,一旦以字符串形式取出,您將永遠不會將其恢復爲以前的文檔格式。

P.S.在模塊CAM :: PDF中,作者還提供了兩個字符串更改腳本:changepdfstring.plchangepagestring.pl。 changepdfstring.pl更改元數據,changepagestring.pl正是你所做的。你可以參考他們。