2008-09-16 29 views

Trả lời

17

Bạn nên sử dụng thẻ cfdocument (có định dạng = "PDF") để tạo tệp PDF bằng cách đặt nó xung quanh trang bạn đang tạo. Bạn sẽ muốn chỉ định thuộc tính tên tệp, nếu không, tài liệu sẽ chỉ truyền trực tiếp tới trình duyệt của bạn.

Sau khi bạn đã lưu nội dung dưới dạng PDF, hãy sử dụng kết hợp đầu mục và cfcontent để kết xuất tệp PDF dưới dạng tệp đính kèm ("Lưu dưới dạng") và thêm tệp vào luồng phản hồi. Tôi cũng đã thêm deletefile = "Yes" trên thẻ cfcontent để giữ cho hệ thống tệp sạch các tệp.

<cfdocument format="PDF" filename="file.pdf" overwrite="Yes"> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
    <title>Hello World</title> 
</head> 
<body> 
    Hello World 
</body> 
</html> 
</cfdocument> 
<cfheader name="Content-Disposition" value="attachment;filename=file.pdf"> 
<cfcontent type="application/octet-stream" file="#expandPath('.')#\file.pdf" deletefile="Yes"> 

Là một sang một bên: Tôi chỉ sử dụng file.pdf cho tên tập tin trong ví dụ dưới đây, nhưng bạn có thể muốn sử dụng một số ngẫu nhiên hoặc phiên chuỗi tạo ra cho tên tập tin để tránh các vấn đề phát sinh từ điều kiện chủng tộc.

1

Tôi không quen thuộc với ColdFusion, nhưng những gì bạn cần làm là đặt Loại nội dung của trang khi người dùng yêu cầu nó là ứng dụng/octet-stream. Điều này sẽ nhắc họ tải xuống mỗi lần.

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

3

Nếu bạn muốn tránh lưu trữ tệp PDF, sử dụng cfdocument không có tên tệp sẽ gửi bản pdf (của flashpaper) trực tiếp tới trình duyệt mà không cần sử dụng cfheader và cfcontent.

Lưu ý: Cũng giống như việc sử dụng cfheader/cfcontent, bạn cần thực hiện việc này trước khi bộ nhớ cache được chuyển sang trình duyệt, vì cơ bản là làm điều tương tự mà không phải lưu trữ tệp.

Để lấy nội dung, tôi có thể sử dụng cfsavecontent được bao quanh cùng một cuộc gọi/bao gồm/v.v. tạo ra trang, với hai ngoại lệ chính. cfdocument dường như có vấn đề với bảng định kiểu bên ngoài, do đó, việc sử dụng bao gồm để đặt kiểu trực tiếp vào tài liệu có thể là một ý tưởng hay. Bạn có thể thử sử dụng @import để thay thế - nó hoạt động cho một số người. Ngoài ra, tôi sẽ cẩn thận về các liên kết tương đối với hình ảnh, vì đôi khi chúng có thể bị hỏng.

3

Cách tiếp cận <cfdocument> là cách bị xử phạt để hoàn thành, tuy nhiên nó không cung cấp mọi thứ có thể có trong cách thao tác các tài liệu PDF hiện có. Tôi đã có một dự án mà tôi cần để tạo phiếu giảm giá dựa trên mẫu PDF có độ phân giải in được thiết kế sẵn. <cfdocument> sẽ cho phép tôi ước lượng đầu ra, nhưng chỉ với hình ảnh bitmap được nhúng trong HTML. Đúng, tôi có thể in ra độ phân giải giả bằng cách tạo ra một hình ảnh lớn và mở rộng nó bằng HTML, nhưng bản gốc là một tệp hình ảnh vector đẹp, sạch sẽ và tôi muốn sử dụng nó thay thế.

Tôi đã sử dụng bản sao <cfx_pdf> để hoàn thành công việc. (Developer's Site, CF Tag Store) Đây là trình bao bọc CF xung quanh thư viện Java PDF cho phép bạn thao tác các tài liệu PDF hiện có, bao gồm điền biểu mẫu PDF, đặt quyền, hợp nhất tệp, vẽ đồ họa vector, bảng và văn bản, sử dụng phông chữ tùy chỉnh, v.v. Nếu bạn sẵn sàng làm việc với nó, bạn có thể nhận được một số kết quả khá ngoạn mục.

Một nhược điểm là có vẻ như nhà phát triển đã để sản phẩm này ra ngoài đồng cỏ trong một thời gian dài. Trang web dành cho nhà phát triển vẫn là bản quyền năm 2003 và không đề cập đến bất kỳ điều gì trong quá khứ ColdFusion MX 6.1. Tôi đã phải phá vỡ một số mẫu mã hóa để sửa một vài lỗi và làm cho nó hoạt động như tôi cần. Nontheless, nó là một công cụ mạnh mẽ.

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