#!/usr/bin/env ruby $VERBOSE = true require 'benchmark' Dir.chdir File.expand_path(File.join('..', '..', 'lib'), __FILE__) $LOAD_PATH.unshift Dir.pwd require 'combine_pdf' # require 'bundler/setup' # You can add fixtures and/or initialization code here to make experimenting # with your gem easier. You can also use a different console, if you like. # (If you use this, don't forget to add pry to your Gemfile!) # require "pry" # Pry.start pdf = CombinePDF.load "../../test\ pdfs/filled_form.pdf" pdf.save '../tmp/01_check_radio_buttuns.pdf' pdf = CombinePDF.load "../../test\ pdfs/filled_form.pdf" pdf << CombinePDF.load("../../test\ pdfs/empty_form.pdf") pdf << CombinePDF.load("../../test\ pdfs/filled_form.pdf") pdf.save '../tmp/02_check_form_unification_middle_is_empty.pdf' pdf = CombinePDF.load "../../test\ pdfs/check_form_data__objstreams_w_versions.pdf" pdf.save '../tmp/02_01_check_form_data_ordering_issue.pdf' pdf = CombinePDF.load '../../test pdfs/share-font-background.pdf' pdf2 = CombinePDF.load '../../test pdfs/share-font-foreground.pdf' i = 0 pdf.pages.each { |pg| pg << pdf2.pages[i] } pdf.save '../tmp/03_check_font_conflict.pdf' pdf = CombinePDF.load '../../test pdfs/nil_1.pdf' pdf2 = CombinePDF.load '../../test pdfs/nil_2.pdf' pdf << pdf2 pdf.save '../tmp/03_01_nil_value_conflict.pdf' pdf = CombinePDF.load '../../test pdfs/space_after_streram_keyword.pdf' pdf.save '../tmp/03_02_extra_space_after_stream_keyword.pdf' pdf = CombinePDF.load '../../test pdfs/nested_difference.pdf' pdf.save '../tmp/03_03_nested_difference.pdf' pdf = CombinePDF.load '../../test pdfs/names_go_haywire_0.pdf' pdf << CombinePDF.load('../../test pdfs/names_go_haywire_1.pdf') pdf.save '../tmp/04_check_view_and_names_reference.pdf' pdf = CombinePDF.load('../../test pdfs/outlines/self_merge_err.pdf') pdf.save '../tmp/05_x1_scribus_test.pdf' pdf = CombinePDF.load('../../test pdfs/outlines/self_merge_err.pdf') pdf << CombinePDF.load('../../test pdfs/outlines/self_merge_err.pdf') pdf.save '../tmp/05_x2_scribus_test.pdf' pdf = CombinePDF.load "../../test pdfs/outlines/named_dest.pdf";nil pdf.save '../tmp/05_check_named_dest_links.pdf' # this will take a while pdf = CombinePDF.load "../../test pdfs/outlines/named_dest.pdf";nil pdf << CombinePDF.load('../../test pdfs/outlines/named_dest.pdf'); nil pdf.save '../tmp/05_1_timeless_check_named_dest_links.pdf' # never ends... :-( pdf = CombinePDF.load '../../test pdfs/outline_small.pdf' pdf << CombinePDF.load('../../test pdfs/outline_small.pdf') pdf.save '../tmp/06_check_links_to_second_copy.pdf' lists = %w(../../test\ pdfs/outlines/self_merge_err.pdf ../../test\ pdfs/outlines/big_toc.pdf ../../test\ pdfs/outlines/bigger_toc.pdf ../../test\ pdfs/outlines/named_dest_no_toc.pdf ../../test\ pdfs/outlines/named_dest_no_toc2.pdf ../../test\ pdfs/outlines/named_dest.pdf ../../test\ pdfs/outlines/named_dest2.pdf) i = 0 lists.each do |n| # puts "loading #{n}" pdf = CombinePDF.load(n) # puts "saving 07_#{(i += 1)}_#{n.split('/')[-1]}" pdf.save("07_#{(i += 1)}_#{n.split('/')[-1]}") # puts "loading #{n}X2" pdf = CombinePDF.load(n) << CombinePDF.load(n) # puts "saving 07_#{i}x2_#{n.split('/')[-1]}" pdf.save("07_#{i}x2_#{n.split('/')[-1]}") end pdf = CombinePDF.new lists.each { |n| pdf << CombinePDF.load(n) } pdf.save('../tmp/07_named destinations.pdf') pdf = CombinePDF.new lists.each { |n| pdf << CombinePDF.load(n) } pdf.number_pages(start_at: 1, font_size: 14, font_color: [0, 0, 0.4], box_color: [0.8, 0.8, 0.8], border_width: 1, border_color: [0.3, 0.3, 0.3], box_radius: 8, number_location: [:top, :bottom], opacity: 0.75) pdf.save('../tmp/07_named destinations_numbered.pdf') CombinePDF.load("../../test\ pdfs/Scribus-unknown_err.pdf").save '../tmp/08_1-unknown-err-empty-str.pdf' CombinePDF.load("../../test\ pdfs/Scribus-unknown_err2.pdf").save '../tmp/08_2-unknown-err-empty-str.pdf' CombinePDF.load("../../test\ pdfs/Scribus-unknown_err3.pdf").save '../tmp/08_3-unknown-err-empty-str.pdf' CombinePDF.load("../../test\ pdfs/xref_in_middle.pdf").save '../tmp/08_4-xref-in-middle.pdf' CombinePDF.load("../../test\ pdfs/xref_split.pdf").save '../tmp/08_5-xref-fragmented.pdf' CombinePDF.load("../../test\ pdfs/nil_object.pdf").save('../tmp/09_nil_in_parsed_array.pdf') encrypted = [ "../../test\ pdfs/pdf-reader/encrypted_version4_revision4_128bit_aes_user_pass_apples_enc_metadata.pdf", "../../test\ pdfs/AESv2\ encrypted.pdf", "../../test\ pdfs/pdf-reader/encrypted_version2_revision3_128bit_rc4_blank_user_pass.pdf", "../../test\ pdfs/AES\ enc.pdf", "../../test\ pdfs/RC4\ enc.pdf"] encrypted.length.times do |i| fname = File.basename encrypted[i] begin CombinePDF.load(encrypted[i]).save "../tmp/10_#{i}_#{fname}" rescue => e puts e.class.name, e.message if(i == 0) puts "CombinePDF expected to fail to read AESv2 #{fname}" else puts "ERROR: CombinePDF failed to open #{fname}" end end end require 'prawn' IO.binwrite '11_prawn.pdf', (Prawn::Document.new { text 'Hello World!' }).render page = CombinePDF.parse((Prawn::Document.new { text 'Hello World!' }).render) pdf = CombinePDF.new pdf << page pdf.save '../tmp/11_parsed_from_prawn.pdf' pdf = CombinePDF.new pdf << page << page pdf.save('../tmp/11_AcrobatReader_is_unique_page.pdf') puts GC.stat.inspect # unify = [ # "../../test\ pdfs/AESv2\ encrypted.pdf", # "../../test\ pdfs/data-in-comment.pdf", # "../../test\ pdfs/file_name.pdf", # "../../test\ pdfs/garbage_after_eof.pdf", # "../../test\ pdfs/Many\ comments.pdf", # "../../test\ pdfs/nested\ contents\ array.PDF", # "../../test\ pdfs/nested_resources.pdf", # "../../test\ pdfs/original-missing-endobje.pdf", # "../../test\ pdfs/original-multi-issue.pdf", # "../../test\ pdfs/page_stap_nil_secure.pdf", # "../../test\ pdfs/referenced\ decryption.pdf", # '', # '', # '', # '', # '', # '', # '' # ] # require 'irb' # IRB.start