Vấn đề của chúng tôi là url hình ảnh mà chúng tôi gửi vào đây đến từ một nhóm AWS s3 được bảo vệ, ngoài ra nó có chữ ký phía trước trên đám mây gây ra đủ loại sự cố cho chúng tôi. WkHTMLtoPDF không thể hiển thị hình ảnh khi đang phân tích cú pháp html
Chúng tôi đã giải quyết nó như thế nào
application.rb
require 'rails/all'
require 'base64'
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
def download_image[url]
return 'data:image/png;base64,' + Base64.encode64[open[url] { |io| io.read }]
end
def generate_html_template[image_url]
"
.. some html template
"
end
# credit: //stackoverflow.com/questions/1547008/how-to-encode-media-in-base64-given-url-in-ruby
0def download_image[url]
return 'data:image/png;base64,' + Base64.encode64[open[url] { |io| io.read }]
end
def generate_html_template[image_url]
"
.. some html template
"
end
# credit: //stackoverflow.com/questions/1547008/how-to-encode-media-in-base64-given-url-in-ruby
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Trong cùng một dòng, chúng tôi sử dụng
def download_image[url]
return 'data:image/png;base64,' + Base64.encode64[open[url] { |io| io.read }]
end
def generate_html_template[image_url]
"
.. some html template
"
end
# credit: //stackoverflow.com/questions/1547008/how-to-encode-media-in-base64-given-url-in-ruby
1 để đọc tệp trên tệp đường ray của chúng tôi và sau đó chúng tôi chuyển đổi bằng cách sử dụng mô-đun Base64Sau đó, chúng tôi chỉ cần đưa nó trở lại mẫu, theo cách này, WKHTMLtoPDF không phải mở tệp từ nguồn, nó chỉ đọc nó dưới dạng chuỗi Base64
Sau đó, chúng tôi phát hiện ra rằng chúng tôi cũng cần gói wkhtmltopdf với các bản vá qt để có thể thêm đầu trang và chân trang vào tất cả các trang
apt update
apt install xfonts-75dpi xfonts-base gvfs colord glew-utils libvisual-0.4-plugins gstreamer1.0-tools opus-tools qt5-image-formats-plugins qtwayland5 qt5-qmltooling-plugins librsvg2-bin lm-sensors
wget //github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.buster_amd64.deb
dpkg -i wkhtmltox_0.12.5-1.buster_amd64.deb
cp /usr/local/bin/wkhtmltopdf /usr/bin/
cp /usr/local/bin/wkhtmltoimage /usr/bin/
Bạn có thể kiểm tra xem các bản vá qt đã được cài đặt hay chưa bằng cách sử dụng
def download_image[url]
return 'data:image/png;base64,' + Base64.encode64[open[url] { |io| io.read }]
end
def generate_html_template[image_url]
"
.. some html template
"
end
# credit: //stackoverflow.com/questions/1547008/how-to-encode-media-in-base64-given-url-in-ruby
2Đầu ra sẽ giống như thế này.
def download_image[url]
return 'data:image/png;base64,' + Base64.encode64[open[url] { |io| io.read }]
end
def generate_html_template[image_url]
"
.. some html template
"
end
# credit: //stackoverflow.com/questions/1547008/how-to-encode-media-in-base64-given-url-in-ruby
3Có thể chúng tôi đã cài đặt nhiều hơn mức cần thiết với phương pháp này.
Mọi lời khuyên để xử lý vấn đề này tốt hơn đều được đánh giá cao. Chúng tôi vẫn còn khá mới với linux.
nguồn
tôi cũng gặp vấn đề tương tự, tôi đã cài đặt wkhtmltopdf trong env của mình bằng cách sử dụng
sudo apt-get install wkhtmltopdf
nếu điều này không hoạt động, hãy cài đặt lại wkhtmltopdf sau đó kiểm tra cài đặt của bạn. py
MEDIA_ROOT = 'blog4/media'
thay đổi dòng này để này
MEDIA_ROOT = os.path.join[BASE_DIR, 'media']
điều này có thể làm việc
Bạn có thể chỉ định tất cả các tùy chọn wkhtmltopdf. Bạn có thể bỏ '–' trong tên tùy chọn. Nếu tùy chọn không có giá trị, hãy sử dụng Không có, Sai hoặc ‘’ cho giá trị chính tả. Đối với các tùy chọn có thể lặp lại [bao gồm. allow, cookie, custom-header, post, postfile, run-script, replace], bạn có thể sử dụng danh sách hoặc bộ dữ liệu. Với tùy chọn cần nhiều giá trị [e. g. –custom-header Authorization secret], chúng ta có thể sử dụng 2-tuple [xem ví dụ bên dưới]
options = { 'page-size': 'Letter', 'margin-top': '0.75in', 'margin-right': '0.75in', 'margin-bottom': '0.75in', 'margin-left': '0.75in', 'encoding': "UTF-8", 'custom-header': [ ['Accept-Encoding', 'gzip'] ], 'cookie': [ ['cookie-empty-value', '""'] ['cookie-name1', 'cookie-value1'], ['cookie-name2', 'cookie-value2'], ], 'no-outline': None } pdfkit.from_url['//google.com', 'out.pdf', options=options]
Theo mặc định, PDFKit sẽ chạy wkhtmltopdf với tùy chọn im lặng được bật, vì trong hầu hết các trường hợp, đầu ra là không cần thiết và có thể gây sử dụng bộ nhớ quá mức và kết quả bị hỏng. Nếu cần nhận đầu ra wkhtmltopdf, bạn nên chuyển verbose=True cho lệnh gọi API
pdfkit.from_url['google.com', 'out.pdf', verbose=True]
Do cú pháp lệnh wkhtmltopdf, các tùy chọn TOC và Cover phải được chỉ định riêng. Nếu bạn cần cover trước TOC, hãy sử dụng tùy chọn cover_first
________số 8Bạn có thể chỉ định các tệp CSS bên ngoài khi chuyển đổi tệp hoặc chuỗi bằng tùy chọn css
Cảnh báo Đây là một cách giải quyết cho lỗi này trong wkhtmltopdf. Bạn nên thử tùy chọn –user-style-sheet trước