Thêm JavaScript vào PDF trực tuyến

Tôi sử dụng rất nhiều biểu mẫu tại nơi làm việc. Văn phòng càng không cần giấy tờ, chúng tôi càng tạo ra nhiều giấy. Mỗi trường có mẫu khám sức khỏe riêng, mỗi cơ quan chính phủ có mẫu đơn riêng, mỗi bài kiểm tra sàng lọc là một mẫu khác để phụ huynh điền vào. Và chữ viết tay của tôi là tàn bạo. Vì vậy, tôi cố gắng lấy bản sao PDF của mọi thứ, sau đó sử dụng PDF Escape để thêm các hộp văn bản mà tôi có thể điền vào và hình ảnh chữ ký của tôi ở dưới cùng. Nhưng khi điền chúng, điều đó vẫn để lại rất nhiều thao tác đánh máy hoặc cắt và dán từ EMR (hồ sơ y tế điện tử) về tên, ngày sinh, địa chỉ của bệnh nhân, v.v. Phải có một cách tốt hơn và một cách chỉ sử dụng các công cụ miễn phí (Tôi sẽ không mua Acrobat với giá 400 đô la)

May mắn thay, Adobe Reader có thể chạy một phiên bản Javascript và chúng tôi có thể sử dụng phiên bản đó để giúp điền vào biểu mẫu

Mỗi tệp PDF bao gồm một đối tượng /Catalog đóng vai trò là đối tượng gốc của tài liệu. Thông thường, nó chỉ bao gồm một tham chiếu đến mảng trang, nhưng nó có thể bao gồm những thứ khác như Javascript sẽ được thực thi khi tài liệu được mở. Cú pháp phức tạp;

0 1 obj
<< 
  /Type /Catalog
  /Pages 0 2 R % a standard catalog entry
  /Names << % the Javascript entry
    /JavaScript <<
      /Names [
        (EmbeddedJS)
        <<
          /S /JavaScript
          /JS (
            app.alert('Hello, World!');
          )
        >>
      ]
    >>
  >> % end of the javascript entry
>>
endobj

Điều đó phức tạp nhưng phần mã hóa rất đơn giản. lấy một tệp PDF hiện có, mở tệp đó trong trình soạn thảo văn bản và tìm /Catalog và chèn bản soạn sẵn sau tham chiếu /Pages và nhập mã của bạn. PDF đủ thông minh để khớp với các dấu ngoặc đơn, vì vậy miễn là mã của bạn ghép nối chúng một cách chính xác (bạn không có bất kỳ chuỗi nào như "We love smileys :)") thì bạn không cần phải thoát khỏi chúng. Nếu bạn cần, hãy thoát chúng bằng dấu gạch chéo ngược. Các dấu gạch chéo ngược thực tế trong mã của bạn cần được thoát (viết chúng dưới dạng \\, vì trình phân tích cú pháp PDF sẽ đọc chuỗi trước khi diễn giải nó thành Javascript

Điều này sẽ tạo ra một tệp PDF không chính xác, vì bảng xref không còn có độ dài byte chính xác. Adobe Reader sẽ tự động sửa lỗi này, cũng như PDF Escape, nhưng chúng nén và trộn lẫn mã nên không thể chỉnh sửa thêm

Xem một trang trống mẫu có nội dung "Xin chào, Thế giới"

Vì vậy, làm thế nào để tôi sử dụng này? . Tôi tải nó vào PDF Escape để tạo biểu mẫu có trường văn bản, chữ ký và địa chỉ văn phòng của tôi. Bây giờ tôi có thể điền nó, nhưng thật bất tiện khi phải gõ mọi thứ. Vì vậy, tôi tải nó trở lại PDF Escape và điền sẵn các trường văn bản. Hướng dẫn chăm sóc đặc biệt Tôi sẽ chỉ nhập "Không", vì đó là cách phổ biến nhất cho đến nay; . Các trường khác nhận văn bản soạn sẵn, như {date}, {dob} (đối với ngày sinh) hoặc

var doc = this;
function replace(replacements){
	for ( var i=0; i
0 (đối với ngày phục vụ), v.v. Kết quả không hữu ích lắm--văn bản soạn sẵn vẫn cần được thay thế

Vì vậy, chúng tôi thêm một quy trình Javascript để thay thế tất cả văn bản bằng các giá trị phù hợp (và xóa bất kỳ trường nào có văn bản bắt đầu bằng '{' để bản mẫu không hiển thị nếu chúng tôi thiếu dữ liệu)

var doc = this;
function replace(replacements){
	for ( var i=0; i

Tất nhiên, bây giờ, chúng tôi phải đưa mã đó vào PDF, nhưng được tùy chỉnh cho từng bệnh nhân. Chương trình PHP sau đây lấy các tham số từ truy vấn URL và sử dụng tham số đó cho đối số

var doc = this;
function replace(replacements){
	for ( var i=0; i
1, nhưng sử dụng ngày và giờ ở phía máy khách

$file = file_get_contents('http://bililite.com/blog/blogfiles/pdf/preschool%20physical-fields.pdf');
$data = json_encode($_GET); // this should make it safe
$js = <<> ]  >> >>
EOT;

$file =  preg_replace(
	'#/Type\s*/Catalog#',
	'$0'.$js,
	$file
);
header('Content-Type: application/pdf');
echo $file;

Và bạn có thể dùng thử tại đây (rõ ràng là trong cuộc sống thực, tôi đã tạo nó bằng Hồ sơ y tế điện tử)

{name} {dob} {dos}

Về cơ bản, nó kéo tệp PDF vào

var doc = this;
function replace(replacements){
	for ( var i=0; i
2 và tạo một đối tượng JSON từ URL thành
var doc = this;
function replace(replacements){
	for ( var i=0; i
3, sau đó đặt JSON đó vào một mẫu Javascript (lưu ý dòng
var doc = this;
function replace(replacements){
	for ( var i=0; i
4. Mẫu Javascript cũng bao gồm chữ tượng hình PDF để tự chèn nó vào tệp PDF bằng cách tìm kiếm chuỗi
var doc = this;
function replace(replacements){
	for ( var i=0; i
5 và đặt Javascript ngay sau đó

PDF có thể chứa JavaScript không?

Adobe đã nâng cao JavaScript để bạn có thể dễ dàng tích hợp mức độ tương tác này vào tài liệu PDF của mình. Bạn có thể gọi mã JavaScript bằng các hành động được liên kết với dấu trang, liên kết và trang.

Chrome có chạy JavaScript trong PDF không?

Nhưng Chrome triển khai JavaScript . Nếu bạn mở một tệp PDF như tệp này trong Chrome, nó sẽ chạy tập lệnh. Tôi phát hiện ra sự thật này sau khi theo dõi bài đăng trên blog này về cách tạo tệp PDF bằng JS. Và tôi hiểu mối quan tâm của họ -- API Adobe JavaScript tùy chỉnh đó có diện tích bề mặt cực kỳ khổng lồ.

Làm cách nào để PDF thực thi JavaScript khi mở?

Đi tới Công cụ>JavaScript>Javascript tài liệu và thêm tập lệnh Javascript Acrobat của bạn vào đó . Họ nên chạy lúc mở. Nếu bạn cần đảm bảo rằng tệp PDF đã được tải đầy đủ trước khi tập lệnh Acrobat Javascript bắt đầu thực thi, bạn có thể sửa đổi tập lệnh Acrobat Javascript của mình cho phù hợp.