2011-01-22 36 views
6

Vì vậy, tôi muốn thêm "chân trang" (thuộc tính) vào cuối mỗi trang của tệp pdf tôi đang tạo thông qua postscript với groff trong linux. Tôi đang chuyển đổi các tập tin từ ps sang pdf bản thân mình, với công cụ ps2pdf, vì vậy tôi có quyền truy cập vào cả hai định dạng.Làm cách nào để thêm chân trang vào cuối mỗi trang của tệp postscript hoặc pdf trong linux?

Hai bài đăng đã được phần nào hữu ích:

How to add page numbers to Postscript/PDF

How can I make a program overlay text on a postscript file?

Tôi không chống lại bằng cách sử dụng phương pháp đầu tiên, nhưng tôi không có quyền truy cập vào các tiện ích pdflatex được đề cập trong kịch bản đầu tiên, cũng như tôi không có tùy chọn để cài đặt nó trên máy mà cần phải làm công việc.

Dường như phương pháp thứ hai có thể hoạt động, nhưng tôi đã cài đặt phiên bản 8.15 ghostscript và tôi không thấy nhiều cờ được liệt kê trên trang người đàn ông (http://unix.browserdebug.com/man/gs/). Tôi nghĩ rằng tôi có quyền truy cập vào cờ "-c" để chèn một số mã postscript, mặc dù nó không được liệt kê. Nhưng dù sao, đây là hai lệnh tôi đã cố gắng nhưng không thành công:

 
gs -o output.pdf -sDEVICE=pdfwrite -g5030x5320 \ 
-c "/Helvetica-Italic findfont 15 scalefont setfont 453 482 moveto (test-string) show" \ 
-f input.ps 

đó mang lại cho tôi điều này:

 
Unknown switch -o - ignoring 
ESP Ghostscript 815.02 (2006-04-19) 
Copyright (C) 2004 artofcode LLC, Benicia, CA. All rights reserved. 
This software comes with NO WARRANTY: see the file PUBLIC for details. 
ERROR: /undefinedfilename in (output.pdf) 
Operand stack: 

Execution stack: 
    %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 
Dictionary stack: 
    --dict:1117/1686(ro)(G)-- --dict:0/20(G)-- --dict:102/200(L)-- 
Current allocation mode is local 
Last OS error: 2 
ESP Ghostscript 815.02: Unrecoverable error, exit code 1 

Vì vậy, rõ ràng là lá cờ -o có một vấn đề và vì vậy tôi đã làm một số nghiên cứu và thử cú pháp sau:

 

gs -sOUTPUTFILE=output.pdf -sDEVICE=pdfwrite -g5030x5320 \ 
-c "/Helvetica-Italic findfont 15 scalefont setfont 453 482 moveto (test-string) show" \ 
-f input.ps 

mà kết quả đầu ra này và làm cho tôi ấn Enter 4 lần (có thể có 4 trang trong input.ps)

 

ESP Ghostscript 815.02 (2006-04-19) 
Copyright (C) 2004 artofcode LLC, Benicia, CA. All rights reserved. 
This software comes with NO WARRANTY: see the file PUBLIC for details. 
Can't find (or can't open) font file /usr/share/ghostscript/8.15/Resource/Font/Helvetica-Italic. 
Can't find (or can't open) font file Helvetica-Italic. 
Querying operating system for font files... 
Didn't find this font on the system! 
Substituting font Helvetica-Oblique for Helvetica-Italic. 
Loading NimbusSanL-ReguItal font from /usr/share/fonts/default/Type1/n019023l.pfb... 3742416 2168114 2083056 759694 1 done. 
Loading NimbusRomNo9L-ReguItal font from /usr/share/fonts/default/Type1/n021023l.pfb... 3781760 2362033 2365632 1015713 1 done. 
Loading NimbusRomNo9L-Medi font from /usr/share/fonts/default/Type1/n021004l.pfb... 3865136 2547267 2365632 1029818 1 done. 
Loading NimbusRomNo9L-Regu font from /usr/share/fonts/default/Type1/n021003l.pfb... 4089592 2759001 2365632 1032885 1 done. 
Using NimbusRomanNo9L-Regu font for NimbusRomNo9L-Regu. 
>>showpage, press <return> to continue<< 

>>showpage, press <return> to continue<< 

>>showpage, press <return> to continue<< 

>>showpage, press <return> to continue<< 


Vì vậy, nó có vẻ như nó sẽ là đủ đơn giản để sử dụng gs chỉ đơn giản là chèn một cái gì đó trong một file ps, nhưng nó được chứng minh là khá phức tạp ...

Trả lời

5

ESP Ghostscript là O-o-o-o-cũ. Đừng dùng nó nữa trừ khi bạn tuyệt đối, tuyệt đối không thể tránh được nó. Đó là một nhánh của Ghostscript ban đầu được sử dụng bởi CUPS trong một thời gian. (Và sau một số vấn đề giữa các nhà phát triển nơi giải quyết, nhiều phiên bản gần đây của CUPS bây giờ cũng sử dụng GPL Ghostscript một lần nữa ...) phiên bản

Mới hơn GPL Ghostscript đang ở đây: http://www.ghostscript.com/releases/

Ngoài ra, -o out.pdf chỉ là một viết tắt cho -dBATCH -dNOPAUSE -sOutputFile=outpdf. Vì vậy, bạn nên thử điều này. (Phần -dNOPAUSE giúp bạn thoát khỏi việc chạm <return> cho mỗi lần tạm ứng trang ....).

Cuối cùng, đừng mong đợi phạm vi tài liệu đầy đủ được cung cấp bởi trang bên thứ baman gs. Thay vào đó tham khảo tài liệu Ghostscript gốc cho phiên bản bạn sử dụng, các bộ phận quan trọng nhất là:


Cập nhật: Ghostscript đã chuyển sang Git (thay vì Subversion) cho kho lưu trữ mã nguồn của họ . Do các liên kết sau đây đã thay đổi, lặp đi lặp lại:

+0

Tôi đang sử dụng hệ thống có cài đặt ESP mà không có đặc quyền cài đặt phiên bản nâng cấp. Tôi tự hỏi nếu có một cách tôi có thể làm cho nó để làm việc với ESP ... – cwd

+0

ESP GhostScript không còn được duy trì .... Cách duy nhất để có được điều này để làm việc như một người dùng không có đặc quyền là cài đặt thêm một phiên bản mới hơn của Ghostscript vào thư mục chính của bạn (hoặc bất kỳ nơi nào khác có thể ghi bởi tài khoản của bạn). –

6

Trong của bạn Tệp PostScript bạn có thể sử dụng bộ đếm trang và xác định lại trang hiển thị để hiển thị nó ở chân trang. Đây là một chương trình mẫu:

4 dict begin 

/showpage_org /showpage load def   % you'll need this later! 
/page_num 0 def 
/page_str 3 string def      % Page numbers -99 to 999 supported, error if > 3 char 

/showpage         % with page number footer 
{ 
    gsave 
    /Courier findfont 10 scalefont setfont % Set the font for the footer 
    /page_num page_num 1 add def   % increment page number counter 
    10 10 moveto (Page) show     
    page_num page_str cvs show    % convert page number integer to a string and show it 
    grestore 
    showpage_org       % use the original showpage 
} def 

%Page 1 
/Courier findfont 22 scalefont setfont 
100 500 moveto (Hello) show 
showpage 

%Page 2 
100 500 moveto (World) show 
showpage 

end 
+0

cảm ơn câu trả lời! chưa có thời gian để kiểm tra điều này (đã viết câu hỏi trong một thời gian trước) nhưng nếu tôi quay lại điều này và nó hoạt động tốt, tôi sẽ thay đổi câu trả lời được chấp nhận của tôi. – cwd

+0

Bạn có thể sử dụng "bind def" trong chức năng "showpage" mới của bạn. Bằng cách này, nó sử dụng "showpage" gốc bên trong, mà không cần một phương thức phụ trợ, tránh việc đệ quy cũng như vậy. –

+0

Làm cách nào để bạn áp dụng lệnh đó cho tất cả/nhiều trang? (thay vì sao chép mã dán #NumOfPages lần ...) – Dor

1

Vị trí hợp lý nhất để thêm chân trang là ở nguồn groff. Cách chính xác để làm điều này tất nhiên sẽ phụ thuộc vào gói macro bạn đang sử dụng. Đối với -ms, bạn có thể làm:

.ds RF "Page \\n(PN 

để thêm số trang làm chân phải. Đối với -mm, giống như sau:

.PF "'''Page \\\\nP'" 

trong đó dấu nháy đơn phân tách phần 'part'center part'right' bên trái của chân trang.

Các vấn đề liên quan