Skip to content

Commit

Permalink
Accept a cell-array of input files (issue #299); accept both "strings…
Browse files Browse the repository at this point in the history
…", 'chars' inputs
  • Loading branch information
altmany committed Mar 29, 2020
1 parent 9974724 commit d8b9f4a
Showing 1 changed file with 30 additions and 9 deletions.
39 changes: 30 additions & 9 deletions append_pdfs.m
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
function append_pdfs(varargin)
%APPEND_PDFS Appends/concatenates multiple PDF files
%
% Example:
% append_pdfs(output, input1, input2, ...)
% append_pdfs(output, input_list{:})
% append_pdfs test.pdf temp1.pdf temp2.pdf
% append_pdfs(outputFilename, inputFilename1, inputFilename2, ...)
% append_pdfs(outputFilename, inputFilenames_list{:})
% append_pdfs(outputFilename, inputFilenames_cell_or_string_array)
% append_pdfs output.pdf input1.pdf input2.pdf
%
% This function appends multiple PDF files to an existing PDF file, or
% concatenates them into a PDF file if the output file doesn't yet exist.
Expand All @@ -21,28 +23,35 @@

% Copyright: Oliver Woodford, 2011-2014, Yair Altman 2015-

%{
% Thanks to Reinhard Knoll for pointing out that appending multiple pdfs in
% one go is much faster than appending them one at a time.
% Thanks to Michael Teo for reporting the issue of a too long command line.
% Issue resolved on 5/5/2011, by passing gs a command file.
% Thanks to Martin Wittmann for pointing out the quality issue when
% appending multiple bitmaps.
% Issue resolved (to best of my ability) 1/6/2011, using the prepress
% setting
% Thanks to Martin Wittmann for pointing out quality issue when appending bitmaps
% Issue resolved (to best of my ability) 1/6/2011, using the prepress setting
% 26/02/15: If temp dir is not writable, use the output folder for temp
% files when appending (Javier Paredes); sanity check of inputs
% 24/01/18: Fixed error in case of existing output file (append mode)
% 24/01/18: Fixed issue #213: non-ASCII characters in folder names on Windows
% 06/12/18: Avoid an "invalid escape-char" warning upon error
% 22/03/20: Alert if ghostscript.m is not found on Matlab path

function append_pdfs(varargin)
% 29/03/20: Accept a cell-array of input files (issue #299); accept both "strings", 'chars'
%}

if nargin < 2, return; end % sanity check

% Convert strings => chars; strtrim extra spaces
varargin = cellfun(@str2char,varargin,'un',false);

% Convert cell array into individual strings (issue #299)
if nargin==2 && iscell(varargin{2})
varargin = {varargin{1} varargin{2}{:}}; %#ok<CCAT>
end

% Ensure that ghostscript() exists on the Matlab path
if ~exist('ghostscript','file')
error('export_fig:append_pdfs:ghostscript', 'The ghostscript.m function is required by append_pdf.m. Install the complete export_fig package from https://www.mathworks.com/matlabcentral/fileexchange/23629-export_fig or https://github.com/altmany/export_fig')
Expand Down Expand Up @@ -128,3 +137,15 @@ function prepareCmdFile(cmdfile, output, varargin)
fpath = normalizePath(fpath); %recursive until entire fpath is processed
pathStr = fullfile(fpath, shortName);
end

% Convert a possible string => char
function value = str2char(value)
try
value = controllib.internal.util.hString2Char(value);
catch
if isa(value,'string')
value = char(value);
end
end
value = strtrim(value);
end

0 comments on commit d8b9f4a

Please sign in to comment.