Copy link to clipboard
Copied
Hi,
I have a question about text frames in InDesign. It should probably be easily solvable, but for some reason, I can't seem to find the solution. I am working with a template that uses multiple columns and threading text. Now I want to split the columns into separate text frames, so I can change the height of each column individually. Is there an easy way to do this? I added a picture of how it looks now.
Copy link to clipboard
Copied
Unfortunately, there is no way to automatically split a multiple columns frame into multiple one column frames. You have to do it manully : resize the existing frame, create 2 other frames then thread them. Maybe a script exists, but I don't know it.
Copy link to clipboard
Copied
You could use a frame with a stroke/fill of none with text wrap to force the text to move to another column.
Copy link to clipboard
Copied
No need to spilt the text columns at all. What you want to do is change your layout to three individual (but still threaded) text frames of 1 column, as opposed to one text frame that has 3 columns in it.
If your page doesn't currnetly have column guides, add them.
Copy link to clipboard
Copied
The easiest way is to do it by hand.
After that, you can adjust the bottom of each column to line up as you wish.
Hope this helps,
Randy
Copy link to clipboard
Copied
SOOOOO HELPFUL!!!!!!!!!!!!! Thank you!!!!!!!!!!!!!
Copy link to clipboard
Copied
Glad I could help.
If you get stuck with InDesign — or any Adobe app, for that matter — come back to the appropriate forum and sound the alarm. There are lots of sharp folks around here who are happy to lend a hand.
Randy
Copy link to clipboard
Copied
Be sure you check out the script @Eugene Tyson linked to. Doing it manually is OK for a page or two, but if you have a number of pages, the script is _way_ faster.
Copy link to clipboard
Copied
Hi @Dave Creamer of IDEAS - thanks for the shout out - prompts me to follow up
I made a few changes for my own needs - allow to set indents for the column to frame, as I often have specific layouts that text cannot pop out of the frame edge. So it insets the text frames
You can change the insets to suit your own needs. Think it also adds vertical justification.
You can get more alignment options here
https://www.indesignjs.de/extendscriptAPI/indesign-latest/#VerticalAlignment.html
// Columns2Frames.jsx
/*
This InDesign script can be used for replacing textframe columns with individual text frames.
//Original author: Steve Wareham, www.stevewareham.com
Updated for CS5 by Olav Martin Kvern
Select a textframe first, then run the script.
*/
main();
function main(){
if ((app.selection.length != 1 )||(app.selection[0].constructor.name != "TextFrame")) {
alert("Please select a text frame and try again.");
}
else{
// Get properties of textframe
var myDocument = app.documents.item(0);
var myTextFrame = app.selection[0];
var myTextFramePrev = myTextFrame.previousTextFrame;
var myTextFrameNext = myTextFrame.nextTextFrame;
var myColAmount = myTextFrame.textFramePreferences.textColumnCount;
var myMultipleCols = myColAmount - 1; // The cols. after the first one
var myTextFrameBounds = myTextFrame.geometricBounds;
var myGutterWidth = myTextFrame.textFramePreferences.textColumnGutter;
var myColWidth = ( (myTextFrameBounds[3] - myTextFrameBounds[1]) - (myGutterWidth * myMultipleCols) ) / myColAmount;
var myGutterAmount = myTextFrame.textFramePreferences.textColumnCount;
var myVerticalJustification = myTextFrame.textFramePreferences.verticalJustification;
var myInsets = [0.5, 0.3, 1, 0.3]; // [top, left, bottom, right] in mm
// Convert insets to points (1 mm = 2.83465 points)
for (var j = 0; j < myInsets.length; j++) {
myInsets[j] = myInsets[j] * 1;
}
// Find the first textFrame in the thread that myTextFrame is in, get its contents
var myFirstTextFrame = myTextFrame;
while (myFirstTextFrame.previousTextFrame instanceof TextFrame){
myFirstTextFrame = myFirstTextFrame.previousTextFrame;
}
var myContents = myFirstTextFrame.contents;
// Find the page to work on
var myPage = findPage(myTextFrame);
if (myPage == null)
{
alert("The text frame needs to be on a page for this script to run.");
myColAmount = 0; // Set myColAmount to 0 so the script doesn't run
}
// Create individual text frames if the original has more than one column
if (myColAmount > 1){
myTextFrame.name = "marked"; // Mark original textframe for removal
var myNewFrames = new Array();
// Create text frame for col. 1
myNewFrames[0] = myPage.textFrames.add();
myBounds = new Array();
myBounds[0] = myTextFrameBounds[0];
myBounds[1] = myTextFrameBounds[1];
myBounds[2] = myTextFrameBounds[2];
myBounds[3] = (myTextFrameBounds[1] + myColWidth);
myNewFrames[0].geometricBounds = myBounds;
myNewFrames[0].label = "0";
myNewFrames[0].textFramePreferences.properties = {
textColumnCount: 1,
insetSpacing: myInsets,
verticalJustification: myVerticalJustification
};
// Create text frames for col. 2 -> end
for (i = 1; i <= myMultipleCols; i ++){
myNewFrames[i] = myPage.textFrames.add();
myBounds[1] = myBounds[3] + myGutterWidth;
myBounds[3] = (myBounds[1] + myColWidth);
myNewFrames[i].geometricBounds = myBounds;
myNewFrames[i].label = (i + "") ;
myNewFrames[i].textFramePreferences.properties = {
textColumnCount: 1,
insetSpacing: myInsets,
verticalJustification: myVerticalJustification
};
}
// Link the new frames.
for (i = myMultipleCols; i > 0; i --){
j = i - 1;
myNewFrames[i].previousTextFrame = myNewFrames[j];
}
// If the text frame was part of a thread, relink the new frame to the thread
if (myTextFramePrev != null){ // If there was a frame before
myNewFrames[0].previousTextFrame = myTextFramePrev;
}
// If there was no frame before, but a frame after
if((myTextFrameNext != null)&&(myTextFramePrev == null)){
myNewFrames[myMultipleCols].nextTextFrame = myTextFrameNext;
}
// If there are no frames before or after
if((myTextFramePrev == null)&&(myTextFrameNext == null)){
myDocument.textFrames.itemByName("marked").nextTextFrame = myNewFrames[0];
}
// Remove original textFrame
myDocument.textFrames.itemByName("marked").remove();
}
}
}
// Use the findPage function to get the page the textframe is on
function findPage(theObj){
var thePage = theObj.parentPage;
return thePage;
}
Copy link to clipboard
Copied
The original post is 3 years old, but another option, which I don’t think was mentioned, would be a Column Break character. There would be some advantages in keeping the 3 column text frame—i.e., you want to change the gutter dimension sometime on the future.
Copy link to clipboard
Copied
Yeh, the column break is fine, if you are vertically top aligned, I think if it's vertically justified it is not so useful.
One of those nagging feature requests I keep meaning to put in.
Copy link to clipboard
Copied
There's a script to do this
https://creativepro.com/convert-multicolumn-text-frames-to-individual-frames-script/
----------------------
The manual way
Select all the text (CTRL A or CMD A)
Cut it
Delete the 1 frame
Layout>Margins and Columns
Add the amount of columns you need (if not already setup)
Draw a text frame in the first column
Paste in your text
You now have 1 column text frame
Click the overset text red plus at the bottom
Shift click the top left of the next empty column
And it will autoflow the next columns,
Find more inspiration, events, and resources on the new Adobe Community
Explore Now