новичок в Elixir и функциональное программирование в целом.
Я пытаюсь создать документ FDF, чтобы заполнить существующие PDF-формы библиотекой Pdftk
.
Думаю, я поступаю неправильно и использую известную логику ООП, а не придерживаясь эликсира.
defp generate_fdf(filename, fields) do
fdf = fdf_header()
|> fdf_content(fields)
File.write!("./tmp/test.fdf", fdf_footer(to_string(fdf)))
IO.puts fdf_footer(to_string(fdf))
end
defp fdf_header() do
"%FDF-1.2\n1 0 obj<</FDF<< /Fields["
end
defp fdf_content(file_content, fields) do
Enum.map fields, fn {k, v} ->
file_content <> "\n" <> "<< /T (#{k}) /V (#{v}) >>"
end
end
defp fdf_footer(file_content) do
file_content <> "\n] >> >>\nendobj\ntrailer\n<</Root 1 0 R>>\n%%EOF"
end
В настоящее время вывод файла generate_fdf приведет к:
%FDF-1.2
1 0 obj<</FDF<< /Fields[
<< /T (first_name) /V (George) >>%FDF-1.2
1 0 obj<</FDF<< /Fields[
<< /T (last_name) /V (Das) >>
] >> >>
endobj
trailer
<</Root 1 0 R>>
%%EOF
Это означает, что fdf_header()
присутствует дважды.
Заранее спасибо.Бонусные баллы, если ответ содержит рекурсию и идиоматичен для эликсира.:)