Comments (5)
Sablon was not built with that use-case in mind. The behavior would be too brittle and not clear when loops and conditions are in play. Therefore I won't introduce public API to get the output you'd like.
Having said that, you can use the internal building blocks of Sablon to extract the data you need. Following is a simple script executed against a fixture template:
path = "/Users/senny/Projects/sablon/test/fixtures/recipe_template.docx"
parser = Sablon::Parser::MailMerge.new
fields = []
Zip::File.open(path).each do |entry|
entry_name = entry.name
content = entry.get_input_stream.read
if entry_name == 'word/document.xml' || entry_name =~ /word\/header\d*\.xml/ || entry_name =~ /word\/footer\d*\.xml/
document = Nokogiri::XML(content)
fields += parser.parse_fields(document)
end
end
fields.map(&:expression)
# => ["=title", "=intro", "ingredients:each(ingredient)", "=ingredient.amount", "=ingredient.name", "ingredients:endEach", "=preparation", "=metadata.generator", "=details.author.name"]
Depending on your templates you might just need to parse word/document.xml
.
from sablon.
@Xorg1984 currently there is no public API to access the fields. Also I'm not sure how easily such a function can be generalized. The fields can be nested within loops and conditionals, they can also use local variables. This makes the expression not very useful outside of it's context.
What are you trying to achieve?
from sablon.
my task - get all document placeholders (this will be a simple strings), show interface to set values to placeholders and then generate a new document with values
maybe parse document independently? what way you recommend?
from sablon.
Thanks!
from sablon.
@avdovin how did you get on this, did you manage to get what you want working?
I am also looking to read all merge_fields from the document so the user can fill out the fields in the interface.
Was the code in the comment sufficient? #16 (comment)
Thanks
from sablon.
Related Issues (20)
- Can i access a specific item in an array? HOT 2
- Dynamic Table Columns HOT 3
- Adding table to html creates corrupted file HOT 3
- template members get automatically stripped HOT 3
- image: "auto" property to keep aspect ratio HOT 2
- HTML Table got inserted without width HOT 1
- Conditionals: allow string comparism HOT 4
- Remove empty pages on the generated docx HOT 4
- Issue with inserting a Hyperlink via HTML content. HOT 2
- Table header: repeat on subsequent pages HOT 1
- Use mail merge fields in LibreOffice Writer HOT 1
- nested tables support? HOT 5
- Insert new mail merge fields using sablon HOT 2
- How to iterate over values of a hash? HOT 1
- Insert Templates into one another HOT 2
- Is it possible to specify the Word "Table Style" with an HTML <table>?
- Re-using content with images on multiple renders HOT 5
- p is not a valid child element of div HOT 4
- Injecting text-align: justify into docx file
- Unicode control characters in inputs may break generation of documents HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sablon.