2008-11-06 25 views
17

Công ty chúng tôi đang tìm cách tích hợp hóa đơn vào một hệ thống mới mà chúng tôi đang phát triển.Tạo hóa đơn PDF - Có bất kỳ giải pháp tạo khuôn mẫu nào không?

Chúng tôi yêu cầu một số giải pháp để tạo bố cục hóa đơn và sau đó chuyển đổi thành pdf.

Chúng tôi đã xem xét chỉ cần đặt ra hóa đơn bằng html/css sau đó chuyển đổi sang pdf. Chúng tôi cũng đã xem xét sử dụng chuyển đổi SVG-> PDf.

Cả hai giải pháp này tích hợp tốt vào ngôn ngữ lập trình hiện có của chúng tôi được sử dụng cho ứng dụng web của chúng tôi.

Trước đây chúng tôi đã là một doanh nghiệp của Microsoft và sử dụng Crystal Reports cho một nhiệm vụ như vậy nhưng chúng tôi đang tìm kiếm một giải pháp Linux nguồn mở cho dự án này.

Có ai có bất kỳ đề xuất nào về cách tiếp cận hoặc công nghệ mà chúng tôi có thể sử dụng cho một tác vụ như vậy không?

Trả lời

0

trang web html-2-pdf Đây có thể là điểm khởi đầu hữu ích: http://maarten.lippmann.us/?p=101

Một trang web một người bạn của tôi được xây dựng sử dụng một kịch bản để khuấy các trang HTML sang PDF in được, quá - http://philambdaupsilon.org. Không chắc chắn về các chi tiết chính xác của nó, nhưng anh ấy là một người dùng SO, và tôi cũng sẽ gửi câu hỏi này cho anh ấy.

9

Hãy thử cách này ... tạo một hoá đơn trống với Word (hoặc bất kỳ thứ gì bạn muốn) và lưu nó dưới dạng PDF.

Sau đó, sử dụng thư viện PDF để sửa đổi PDF (chèn văn bản tại các tọa độ cụ thể). Chúng tôi làm điều này trong thế giới Microsoft và nó rất dễ dàng.

Lợi ích lớn nhất là chúng tôi có thể sử dụng các công cụ của riêng mình để tạo và sửa đổi mẫu. Nếu chúng ta muốn thêm một số văn bản tĩnh, chúng ta chỉ cần mở Word, thực hiện thay đổi và lưu nó vào một tệp PDF (đang được sử dụng làm mẫu).

Đối với Microsoft, chúng tôi sử dụng iTextSharp mà thực sự là một C# cảng bản gốc Java version of iText


Ngoài ra ...

Bạn có thể sử dụng phần mềm Adobe Acrobat để chèn các lĩnh vực trong PDF (địa chỉ, điện thoại , số hóa đơn, chi tiết đơn hàng 1, chi tiết đơn hàng 2, v.v ...) và sau đó sử dụng iText/iTextSharp để điền các trường này vào thời gian chạy.

Điều này, cụ thể hơn, những gì chúng tôi làm ... và nó cực kỳ dễ dàng.

+1

Sửa đổi các ứng dụng PDF như vậy sẽ là một nỗi đau lớn vì cách thức các tệp PDF được cấu trúc. Mỗi phần tử có một vị trí cố định và không có điều 'reflow' thingamajari cho phép bạn điều chỉnh nội dung trong khi vẫn giữ nguyên bố cục. –

+0

@ Jasper - nếu chúng ta đang nói về hóa đơn, nó không phải là khó. Bạn biết tọa độ nào bạn có thể nhập văn bản và bạn thường chỉ muốn một dòng tại một thời điểm. BTW ... Tôi cập nhật với một ý tưởng khác. – Jason

+0

Ah vâng, đã không xem xét trường hợp sử dụng quá nhiều. Lý do tôi tránh tạo ra các tập tin PDF như vậy là bởi vì nó sẽ không làm việc trong một hệ thống quản lý hợp đồng mà sẽ phải kéo tất cả các loại pha nguy hiểm để có được văn bản tìm kiếm tốt. –

5

Trước đây tôi đã tạo hóa đơn bằng cách tạo biểu mẫu cho tệp PostScript và sau đó sử dụng ps2pdf của Ghostscript để chuyển đổi các tệp đó thành tệp PDF.

+0

+1 - Postscript không phải là tất cả những khó khăn để tạo ra. Trong một pinch bạn có thể nhìn vào đầu ra từ một chương trình DTP hoặc vẽ. – ConcernedOfTunbridgeWells

+0

Vâng, vâng, nhưng tôi đã chế tác tất cả bằng tay ;-) – Alnitak

0

Thật không may, hệ thống tốt nhất trên thị trường (hiện tại) đang chuyển HTML & CSS tới máy chủ ColdFusion và trả lại tệp PDF được hiển thị. Vì vậy, nếu tiền không phải là một mối quan tâm lớn, đây là giải pháp triển khai nhanh nhất sẽ mang lại kết quả tốt nhất.

Tôi đã cố gắng rất nhiều để có được FPDF, TCPDF, lớp pdf R & OS, và thậm chí CodeIgniter's recommendation để hoạt động, nhưng không có đầu ra ổn định cho bất kỳ thứ gì ngoài các tệp HTML cơ bản/nhạt nhẽo nhất.

Thành thật mà nói, nếu giải pháp ColdFusion không khả thi, tôi sẽ sử dụng html2ps và sau đó ps2pdf để chuyển đổi tệp của bạn thành PDF.

(Tất cả điều này giả định rằng bạn không muốn dành thời gian và thiết kế từng tệp PDF bằng mã PDF-người tạo gốc trong PHP. Đây là những hệ thống như sử dụng SugarCRM. việc tạo ra thực tế của mỗi tệp trình tạo PDF là một quá trình đau đớn nhất)

6

Chúng tôi sử dụng Reportlab bằng Python. Nếu bạn nhìn xung quanh có một tải các hình thức/hóa đơn đã sẵn sàng/v.v.

+0

Nó không miễn phí, nhưng nó toàn diện và thực hiện tốt công việc. – btk

+0

có phiên bản nguồn mở miễn phí: http://www.reportlab.com/software/opensource/ – hoju

+0

Tôi đã sử dụng reportlab và đã tạo dự án tạo hóa đơn này cho hóa đơn fedex. https://github.com/radzhome/fedex-commercial-invoice Nếu có hóa đơn chung khác mà ai đó muốn thêm, tôi sẽ mở nó. – radtek

1

Không chắc chắn mục tiêu của bạn là gì, nhưng có một thư viện php mã nguồn mở được gọi là fpdf, cũng có phần mở rộng để lấy pdf được tạo trước làm bố cục và sau đó điền nó với nhiều nội dung hơn thông tin đó.

Tuy nhiên, tôi sẽ tìm một giải pháp mà bạn có thể tích hợp độc đáo vào plattform bạn đang xây dựng, nhưng tôi sẽ không đi trong một HTML-> PDF giải pháp vì bạn sẽ không có bất kỳ đầu mối về những gì sẽ phù hợp trên một mảnh giấy liên quan đến kích thước trong loại môi trường đó, có nghĩa là bạn sẽ không biết khi nào bạn nên chia nội dung thành hai mẫu riêng biệt.

2

Có lẽ giải pháp linh hoạt nhất là tạo ra XMLs với các dữ liệu hóa đơn và sau đó bằng cách sử dụng XSLTs chuyển đổi, thành PDF, HTMLs, bất cứ điều gì ...

+1

Không dễ dàng để có được định dạng chính xác được thực hiện với xslt (và xsl-fo). –

2

Nó phụ thuộc vào môi trường của bạn. Nếu bạn có quyền truy cập vào Java, bạn có thể xem iText (http://www.lowagie.com/iText/), một thư viện cho phép bạn tạo các tệp PDF khi đang di chuyển.

9

Cách thông thường là cài đặt (La) TeX (có thể đã có trên hộp Linux) và chạy pdflatex để tải các tệp pdf. Bạn cũng có thể sử dụng Apache FOP, nếu bạn thích xslt và xsl-fo.

Nếu số lượng hóa đơn để tạo thấp, bạn có thể muốn sử dụng văn phòng mở (trực tiếp hoặc dưới dạng bộ công cụ).

Nếu bạn muốn có vị trí chính xác cao và truy cập ở mức độ thấp, thư viện pdf cấp thấp (Tôi không biết nếu iTextSharp hoạt động với mono) có thể là những gì bạn muốn.

Tôi sẽ thử LaTeX trước tiên, bởi vì nó cho phép bạn nhận được kết quả với nỗ lực ít nhất.

+1

FOP, XSLT và XSL-FO là quá mức cần thiết cho điều này, chúng là một cơn ác mộng. (IMHO) – Jason

0

Chúng tôi đã sử dụng Báo cáo Jasper trước đây. Nó không phải là những gì bạn gọi là thân thiện với người dùng, nhưng nó sẽ nói chuyện trực tiếp với cơ sở dữ liệu của bạn.

3

Có một số công cụ báo cáo OSS (Jasper Reports, PentahoBIRT để đặt tên ba) mà bạn có thể sử dụng theo cách tương tự như bạn đã sử dụng Crystal Reports trong lịch sử. Một trong những áp phích khác đề cập đến ReportLab, là một tùy chọn nếu bạn đang sử dụng Python hoặc có thể nhúng thời gian chạy Python vào ứng dụng của bạn.

0

html2pdf hoạt động rất tốt. Bạn có thể sử dụng điều này để tạo cả báo cáo HTML và PDF từ cùng một nguồn.

+0

Cách phân trang hoạt động với HTML? Ví dụ: hầu hết các bộ xử lý văn bản đều biết cách tách hoặc quấn các dòng lên trang sau. Bạn có cần phải làm điều này bằng tay với html2pdf không? –

0

Tôi đang không hài lòng với Black Sheep Invoices ngay bây giờ, điều tuyệt vời lúc đầu nhưng hiện tại tôi đang gặp sự cố khi thực sự hiển thị tệp PDF. Rất nhiều khó khăn cài đặt - có thể dễ dàng hơn rất nhiều trên máy chủ của riêng bạn nhưng tôi đang ở trên một máy chủ chia sẻ với nó. Phần đầu ra HTML và các phần quản lý dữ liệu cũng được thực hiện tốt, đó là thứ mà bạn sẽ không thoát khỏi việc tạo ra một mẫu postscript. Tôi đã hy vọng tìm thấy một tham chiếu đến một thư viện mà có một đội ngũ phát triển hoạt động mặc dù (Black Sheep không được cập nhật tại thời điểm này).

0

Nếu bạn muốn trình duyệt HTML hoàn hảo chuyển đổi sang PDF sau đó thử commandlineprint

Bạn sẽ cần phải cài đặt firefox trên một distro linux, vô hiệu hóa tất cả các cảnh báo firefox và sau đó chạy nó thông qua một màn hình ảo. Check this thread để biết thêm chi tiết.

Thật tức giận khi chạy tốt nhưng cho bạn kết quả tốt nhất để chuyển đổi HTML sang PDF mà tôi đã thấy.

0

OK, tìm kiếm các dự án Google Code được bật lên Simple Invoices, điều này thật tuyệt vời và được duy trì tốt.

+0

Bây giờ, tôi không ấn tượng như lúc đầu. Mặc dù họ có tài liệu cài đặt tuyệt vời, họ không làm rõ cách xóa dữ liệu mẫu hoặc thay đổi thông tin tài khoản quản trị o_0 –

1

Bạn cũng có thể thử sử dụng XSL: FO. XSL: FO là tiêu chuẩn được viết thành văn bản để mô tả bố cục trang: http://www.w3.org/TR/xsl/#fo-section.

Tôi đã thành công trên hai dự án tạo tài liệu bằng cách tạo một lược đồ XML xác định nội dung của "PDF". Sau đó tôi sử dụng công cụ XSD (từ Microsoft) để tạo ra một lớp đại diện cho tài liệu này. Sau đó tôi ánh xạ dữ liệu của tôi vào cấu trúc đó, tuần tự hóa lớp được phổ biến thành XML, cùng với biểu định kiểu XSL xác định cách dữ liệu đó được ánh xạ thành FO và chuyển nó tới trình định dạng FO. Đối với các trình định dạng, tôi đã sử dụng Xml2Pdf của Alt-Soft với thành công. Có một vài người khác ngoài kia. Có một số công cụ có sẵn để giúp tạo biểu định kiểu XSL cho FO (ví dụ: stylusstudio và XmlSpy), nhưng tôi khuyên bạn nên tìm hiểu cấu trúc FO khi các công cụ dường như tạo ra các bảng định kiểu cồng kềnh. FO có thể so sánh được với HTML (trong đó thẻ P là một thẻ BLOCK trong FO), nhưng có thể phức tạp. điều tốt đẹp này về FO, là một số hỗ trợ chuyển đổi định dạng sang các định dạng khác, chẳng hạn như Word, HTML, vv

tùy chọn khác:

  1. iTextSharp (C# cảng iText). Chỉ cần bắt đầu đọc về điều này. Mã nguồn mở và miễn phí. Tôi không nghĩ rằng có bất kỳ "templating" được hỗ trợ với điều này, nhưng tôi có thể sai về điều đó.

  2. Dịch vụ báo cáo máy chủ SQL. Giả sử dữ liệu hóa đơn của bạn có trong hoặc có thể được đặt vào, một định dạng có thể đọc bằng dịch vụ báo cáo (SQL Server, Dịch vụ Web, v.v.), xác định bố cục trong SSRS và sau đó xuất bản lên máy chủ báo cáo. Sử dụng Dịch vụ Web SSRS hoặc thực thi tham số truy vấn để thực thi báo cáo và xuất nó dưới dạng PDF.

2

Có hai bước, nếu tôi hiểu một cách chính xác:
1) Tạo mẫu PDF với placeholders để cư dữ liệu lập trình
2) Populating mẫu PDF lập trình trong thời gian chạy

Đối # 1 , OpenOffice cho phép tạo các mẫu PDF, sau đó có thể được phổ biến theo lập trình. Đó là đủ tốt để tạo ra các hóa đơn đơn giản mà không có thể liên quan đến datagrid/bảng loại công cụ.

Đối với # 2, bạn đã có câu trả lời ở đây - iText, iTextSharp.

Hy vọng điều này sẽ hữu ích!

+0

Tôi hiện đang sử dụng Open Office để tạo mẫu PDF gốc và sau đó sử dụng iTextSharp để chèn dữ liệu theo chương trình vào các trường biểu mẫu. Tôi đặt đường viền của các trường để không hiển thị, vì vậy người dùng không thể biết được trường là trường văn bản! –

0

Tôi sử dụng TROFF cho hóa đơn của mình do mã hóa văn bản cực kỳ đơn giản. Logic là một vài dòng Perl. Giữ nó đơn giản.

0

tôi sử dụng mở văn phòng trên máy chủ và sau đó tạo ra XML cho tài liệu (chỉ cần giải nén tài liệu và hack đi)

0

Một số có thể sử dụng trình soạn thảo mẫu Dhek để xác định vùng/trình giữ chỗ cho tệp PDF hiện có mà không thay đổi tài liệu hiện có, sau đó điền tài liệu đó để tạo tài liệu cuối cùng (ví dụ: với giá trị người dùng từ biểu mẫu): https://github.com/applicius/dhek.

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